package redis.clients.jedis.commands;

import redis.clients.jedis.args.FlushMode;

import java.util.List;


/**
 * Jedis BinaryScriptingCommands 是 Jedis 库中的一个接口，
 * 它主要用于执行 Redis 脚本编程命令。
 * 这个接口中定义的方法允许用户在 Java 程序中直接执行 Redis 脚本，从而实现更复杂的操作。
 * Jedis 类继承自 BinaryJedis，BinaryJedis 又实现了包括 BinaryScriptingCommands 在内的多个接口。
 * 这意味着 Jedis 对象可以使用 BinaryScriptingCommands 中定义的所有方法。
 * 这些方法主要用于处理 Redis 脚本，例如 EVAL、EVALSHA 等，
 * 它们允许用户在 Java 程序中直接编写和执行 Redis 脚本，以实现更复杂的逻辑和操作。
 */
public interface BinaryScriptingCommands {

    /**
     * @deprecated Use {@link BinaryScriptingCommands#eval(byte..., int, byte[]...)}.
     */
    @Deprecated
    Object eval(byte[] script, byte[] keyCount, byte[]... params);

    Object eval(byte[] script, int keyCount, byte[]... params);

    Object eval(byte[] script, List<byte[]> keys, List<byte[]> args);

    Object eval(byte[] script);

    Object evalsha(byte[] sha1);

    Object evalsha(byte[] sha1, List<byte[]> keys, List<byte[]> args);

    Object evalsha(byte[] sha1, int keyCount, byte[]... params);

    /**
     * WARNING: This method will return {@code java.util.List<java.lang.Boolean>} in next major release.
     */
    // TODO: should be Boolean, add singular version
    List<Long> scriptExists(byte[]... sha1);

    byte[] scriptLoad(byte[] script);

    String scriptFlush();

    String scriptFlush(FlushMode flushMode);

    String scriptKill();
}
